import grok
from BTrees.OIBTree import OIBTree
from operator import itemgetter

class ContaVotos(grok.Application, grok.Container):
    def __init__(self):
        super(ContaVotos,self).__init__()
        self.votos = OIBTree()
        
    def votoPara(self, nome):
        if nome in self.votos:
            self.votos[nome] += 1
        else:
            self.votos[nome] = 1
            
    def tirarVotoDe(self, nome):
        if self.votos.get(nome):
            self.votos[nome] -= 1

class Index(grok.View):
    ordem = 'nome'
    def update(self, nome=None, ordem=None):
        if nome is not None:
            self.context.votoPara(nome)
        if ordem is not None:
            self.ordem = ordem
            
    def listarVotos(self):
        votos = self.context.votos
        votos = [{'nome':chave,'votos':votos[chave]} for chave in votos]
        inverter = (self.ordem == 'votos')
        return sorted(votos, key=itemgetter(self.ordem), reverse=inverter)
        
class Alterar(grok.View):
    def update(self, nome, operacao):
        if operacao=='+':
            self.context.votoPara(nome)
        else:
            self.context.tirarVotoDe(nome)

    def render(self):
        self.redirect(self.url('index'))


